<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /* 
        基本数据类型和引用数据类型之间的区别 
        场景:赋值语句中的区别
        */
        

        /* 基本类型：只传值 */
        var a = 10;
        var b = a;
        console.log(b);
        b = 20;
        console.log(a);
        /* 引用：既传值也传址 */
        var obj = {name:"lisi"}
        var str = obj  //引用类型赋值计算的时候传递的是引用或者说指针
        console.log(str);
        str.age = 18;
        console.log(obj);

        /* 
        1.如果声明一个引用数据类型，那么占了两块内存空间
        变量存在栈中
        生成的实际对象存在堆内存中 
        栈内存中的变量存的是一个引用(指针，地址的值)，指向堆内存中的实际对象
        */
        /* 
        2.发生了赋值运算，实际上将地址的值赋予了sum，
        那么这个指针也是指向堆内存中的同一个对象
        */
        var arr = [1,2,3]
        var sum = arr
        console.log(sum);
        arr.push(4)
        console.log(sum);
    </script>
</body>
</html>